package org.jeecg.modules.meter.service;

import io.swagger.models.auth.In;
import org.jeecg.modules.meter.iot.entity.MeterBaseDto;
import org.jeecg.modules.meter.iot.entity.MeterCollectInfoDto;
import org.jeecg.modules.meter.iot.entity.MeterOnlineStatusDto;
import org.jeecg.modules.meter.iot.entity.MeterSwitchStatusDto;

import java.util.List;

/**
 * @Description 电表对硬件下发服务
 * @Author liurui
 * @Date 2020/12/04 17:42
 * @Version 1.0
 */
public interface MeterIotService {

    /**
     * 读取水电表最新用量读数 (同步)
     * @param meterKey  唯一设别号
     * @param productKey
     * @return
     * @throws Exception
     */
    List<MeterCollectInfoDto> getCollectInfo(String meterKey, String productKey, String requestUrl,String iotType) ;

    /**
     * 添加修改仪表基础信息
     * @param meterCode  表地址/编号
     * @param collectorAddress  采集器地址
     * @param meterType  表计类型 1:电表 2:水表
     * @param productKey
     * @param requestUrl
     * @param iotType
     * @return
     */
    MeterBaseDto saveMeterBase(String meterKey,String meterCode, String collectorAddress, Integer meterType, String productKey, String requestUrl, String iotType);

    /**
     * 删除仪表基础信息
     * @param meterKey
     * @param productKey
     * @param requestUrl
     * @param iotType
     * @return
     */
    boolean delMeterBase(String meterKey,String productKey, String requestUrl,String iotType);

    /**
     * 更换表
     * @param meterKey  旧表KEY
     * @param newMeterCode   新表地址
     * @param collectorAddress 新表采集器地址
     * @param productKey
     * @param requestUrl
     * @param iotType
     * @return
     */
    MeterBaseDto replaceMeter(String meterKey,String newMeterCode,String collectorAddress,String productKey, String requestUrl,String iotType);


    /**
     * 获取最新通断状态 （同步）
     * @param meterKey
     * @param productKey
     * @param deviceName
     * @return
     * @throws Exception
     */
    List<MeterSwitchStatusDto> getSwitchStatus(String meterKey, String productKey, String deviceName) ;


    /**
     * 获取最新在线状态 （同步）
     * @param meterCode
     * @param productKey
     * @param deviceName
     * @return
     * @throws Exception
     */
    List<MeterOnlineStatusDto> getOnlineStatus(String meterCode, String productKey, String deviceName) ;




    /**
     * 缴费充值 （异步）
     * @param meterCode
     * @param requestCode
     * @param orderNo 订单编号， 对应MeterOrder表  订单编号sn  , 不是out_order_id  (和本地订单交互，都是通过sn , 不是out_order_id)
     * @param amount
     * @param productKey
     * @param deviceName
     * @return  返回 true 代表请求成功 ， 数据需要接收事件获取
     * @throws Exception
     */
    boolean meterPayRequest(String meterCode, String requestCode, String orderNo, String amount, String productKey, String deviceName) ;


    /**
     * 通断状态控制 (异步)
     * @param meterCode
     * @param requestCode 传通断状态控制表id
     * @param state  状态 ： 1 开   2 关
     * @param productKey
     * @param requestUrl 请求url
     * @param iotType
     * @return 返回 true 代表请求成功 ， 数据需要接收事件获取
     * @throws Exception
     */
    boolean controlSwitchRequest(String meterKey, String requestCode, int state, String productKey, String requestUrl,String iotType) ;


    /**
     * 通断模式控制 (异步)
     * @param meterCode
     * @param requestCode 传通断模式控制表id
     * @param mode 状态 ： 1 预付费   2 后付费
     * @param productKey
     * @param deviceName
     * @return 返回 true 代表请求成功 ， 数据需要接收事件获取
     * @throws Exception
     */
    boolean controlModeRequest(String meterCode, String requestCode, int mode, String productKey, String deviceName) ;


    /**
     * 修改单价
     * @param meterCode
     * @param requestCode  传修改单价记录表id
     * @param price
     * @param productKey
     * @param deviceName
     * @return 返回 true 代表请求成功 ， 数据需要接收事件获取
     * @throws Exception
     */
    boolean modifyPriceRequest(String meterCode, String requestCode, double price, String productKey, String deviceName) ;

}
